package com.wande.dataplatform.filecollection.service;

import com.wande.dataplatform.filecollection.domain.CollectionRule;
import com.wande.dataplatform.filecollection.domain.MappingRule;
import com.wande.dataplatform.filecollection.domain.dto.LoadResult;
import com.wande.dataplatform.filecollection.domain.dto.ValidationResult;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * 数据加载服务接口
 *
 * @author wande
 */
public interface IDataLoadService {

    /**
     * 加载数据列表
     *
     * @param data 数据列表
     * @param rule 采集规则
     * @param mappingRule 映射规则
     * @return 加载结果
     */
    LoadResult loadData(List<Map<String, Object>> data, CollectionRule rule, MappingRule mappingRule);

    /**
     * 批量加载数据（流式处理）
     *
     * @param dataIterator 数据迭代器
     * @param rule 采集规则
     * @param mappingRule 映射规则
     * @return 加载结果
     */
    LoadResult loadDataBatch(Iterator<Map<String, Object>> dataIterator, CollectionRule rule, MappingRule mappingRule);

    /**
     * 校验数据记录
     *
     * @param record 数据记录
     * @param mappingRule 映射规则
     * @return 校验结果
     */
    ValidationResult validateData(Map<String, Object> record, MappingRule mappingRule);

    /**
     * 转换数据记录
     *
     * @param sourceData 源数据
     * @param mappingRule 映射规则
     * @return 转换后的数据
     */
    Map<String, Object> transformData(Map<String, Object> sourceData, MappingRule mappingRule);
}
